package DesignPattern.Builder.Singleton.Lazy;

public class LazyStaticClass {
    private LazyStaticClass() {
    }

    /*
        静态内部类单例模式中实例由内部类创建
        由于 JVA 在加载外部类的过程中，是不会加载静态内部类的，只有内部类的属性/方法被调用时才会被加载，并初始化其静态属性
        静态属性由于被 static 修饰，保证只被实例化一次，并且严格保证实例化顺序。
     */
    private static class LazyHolder {
        private static final LazyStaticClass INSTANCE = new LazyStaticClass();
    }

    /*
        第一次加载LazyStaticClass类时不会去初始化INSTANCE，只有第一次调用getInstance，虚拟机加载LazyHolder
        并初始化INSTANCE，这样不仅能确保线程安全，也能保证 LazyStaticClass 类的唯一性。
     */
    public static LazyStaticClass getInstance() {
        return LazyHolder.INSTANCE;
    }

}
